<?php
/**
 *
 * UCModTaskInterface class file
 *
 * @category   UC
 * @author     刘海涛 <liuhaitao01@snda.com>
 * @copyright  1997-2010 SDO Group
 * @version    Release: 1.0.0
 * @link       http://www.sdo.com
 * @license    http://www.sdo.com
 */

require_once(dirname(__FILE__).'/../../libraries/UCLibCache.php');
require_once(dirname(__FILE__).'/../../models/twitter/UCModUserMoodRecord.php');
require_once(dirname(__FILE__).'/../user/UCModUserInfo.php');
require_once(dirname(__FILE__).'/UCModTask.php');

class UCModTaskInterface
{
	public static $s_error = '';

	/**
	 * 添加用户积分
	 * @param	string	$uid	用户ID
	 * @param	int		$score	评论条数
	 * @return	bool			true|false
	 *
	 */
	static public function addUserGrade($uid,$score)
	{
	}

	/**
	 * 获取用户积分
	 * @param	string	$uid	用户ID
	 * @return	int				积分数量
	 *
	 */
	static public function getUserGrade($uid)
	{
	}
	

	/**
	 * 获取最新中奖列表
	 * @param	int		$num	列表长度
	 * @return	array			array('name'=>用户名,''=>'奖品',''=>'时间')
	 *
	 */
	static public function getLastAwardList($num)
	{
	}

	/**
	 * 可重复任务入库
	 * @param	string	$uid		用户ID
	 * @param	int		$task_id	任务ID
	 * @return	bool				true|false	
	 *
	 */
	static public function addTaskTrigByCircle($uid,$task_id)
	{
		if(empty($uid))
		{
			self::$s_error = UCConfTask::$ar_task_error[UCConfTask::TASK_ERROR_PARAM];
			return false;
		}
		$o_task = new UCModTask($uid);
		if(count($o_task->getCircleTask($task_id))>0)
		{
			return true;
		}
		$i_ret = $o_task->addTask(array('task_id' => $task_id,'task_status'	=> UCConfTask::TASK_USER_STATUS_FINISH));
		if($i_ret<0)
		{
			self::$s_error = UCConfTask::$ar_task_error[$i_ret];
			return false;
		}
		return true;
	}

	/**
	 * 修改用户获奖状态信息
	 * @param	int		$id			任务流水ID
	 * @param	array	$ar_param	array('task_status'=>'任务状态','task_award_type'=>‘任务获奖类型’,'task_award'=>'任务奖品')
	 * @return	bool				true|false
	 *
	 */
	static public function modifyUserTaskInfo($id,$ar_param)
	{
		return true;
	}

	/**
	 * 检查用户信息某个参考值完成度
	 * @param	string	$uid		用户ID
	 * @param	int		$percent	完成度参数
	 * @return	bool				true|false	
	 *
	 */
	static public function checkUserProfile($uid,$percent=UCConfTask::TASK_PROFILE_PERCENT)
	{
		if(empty($uid))
		{
			self::$s_error = UCConfTask::$ar_task_error[UCConfTask::TASK_ERROR_PARAM];
			return false;
		}
		$o_user = UCModUserInfo::getUser($uid);
		$i_ret	= $o_user->getCompletePercent();
		if($percent>$i_ret)
		{
			self::$s_error = '你离完成任务还差' . ($percent - $i_ret) . '%信息完成度';
			return false;
		}
		return true;
	}

	/**
	 * 检查用户是否有固定数量好友
	* @param	string	$uid	用户ID
	 * @param	int		$type	好友类型
	 * @param	int		$num	数量
	 * @return	bool			true|false
	 *
	 */
	static public function checkHaveFriends($uid,$type=UCConfTask::TASK_FRIEND_INTER,$num=UCConfTask::TASK_HAVE_FRIENDS_NUM)
	{
		if(empty($uid))
		{
			self::$s_error = UCConfTask::$ar_task_error[UCConfTask::TASK_ERROR_PARAM];
			return false;
		}
		$o_user = UCModUserInfo::getUser($uid);
		if(UCConfTask::TASK_FRIEND_SINGEL==$type)
		{
			$i_count = $o_user->getFollowerCount();
		}
		else
		{
			$i_count = $o_user->getFriendCount();
		}
		if($num>$i_count)
		{
			self::$s_error = '你离完成任务还差' . ($num - $i_count) . '个好友';
			return false;
		}
		return true;
	}

	/**
	 * 检查用户限定时间是否完成固定数量的记录
	 * @param	string	$uid		用户ID
	 * @param	int		$task_id	任务ID
	 * @param	int		$percent	完成度参数
	 * @return	bool				true|false	
	 *
	 */
	static public function checkUserRecord($uid,$task_id,$num=UCConfTask::TASK_RECORD_NUM)
	{
		if(empty($uid))
		{
			self::$s_error = UCConfTask::$ar_task_error[UCConfTask::TASK_ERROR_PARAM];
			return false;
		}
		$ar_time = $this->_getTime(UCConfTask::$ar_task_info[$task_id]['ext']);
		$o_record = new UCModUserMoodRecord($uid);
		if(!$o_record->isPostCountRecordByTime($ar_time['start_time'],$ar_time['end_time'],$num))
		{
			return false;
		}
		return true;
	}

	/**
	 * 增加任务记录 
	 * @param	string	$uid		用户ID
	 * @param	int		$task_id	任务ID
	 * @return	mix					false:error 1:已经完成不入库 2：第一次完成入库	
	 *
	 */
	static public function addUserTask($uid,$task_id)
	{
		if(empty($uid) || empty($task_id))
		{
			self::$s_error = UCConfTask::$ar_task_error[UCConfTask::TASK_ERROR_PARAM];
			return false;
		}
		
		$ar_ret = self::checkFreshTask($uid);

		if(2==$ar_ret['result'])
		{
			return 1;
		}

		$ar_tmp = array_flip($ar_ret['info']);
		if(!array_key_exists($task_id,$ar_tmp))
		{
			return 1;
		}
		$o_task = new UCModTask($uid);
		$i_ret = $o_task->addTask(array('task_id' => $task_id,'task_status'	=> UCConfTask::TASK_USER_STATUS_FINISH));
		if($i_ret<0)
		{
			self::$s_error = UCConfTask::$ar_task_error[$i_ret];
			return false;
		}
		if(1==count($ar_ret['info']))
		{
			$ar_ret['result'] = 2;
			//发通知
		}
		$ar_ret['info'] = array_splice($ar_ret['info'], $ar_tmp[$task_id], $ar_tmp[$task_id]+1);
		$o_cache	= new UCLibCache(UCConfTask::TASK_MEMCACHE_FLAG); 
		$s_key		= UCConfTask::TASK_MEMCACHE_KEY_FRESH.$uid;
		if($s_ret=$o_cache->read($s_key))
		{
			$o_cache->write($s_key, serialize($ar_ret)); 
		}
		return 2;
	}

	/**
	 * 检查指定任务是否完成
	 * @param	string	$uid		用户ID
	 * @return	mix					false：error 正常：array(	'result'	=> '1 新手任务未全部完成 2 新任务全部完成',
																'info'		=> '未完成时返回未完成任务ID数组')	
	 *
	 */
	static function checkFreshTask($uid)
	{
		if(empty($uid))
		{
			self::$s_error = UCConfTask::$ar_task_error[UCConfTask::TASK_ERROR_PARAM];
			return false;
		}
		
		$o_cache	= new UCLibCache(UCConfTask::TASK_MEMCACHE_FLAG); 
		$s_key		= UCConfTask::TASK_MEMCACHE_KEY_FRESH.$uid;
		if(!$s_ret=$o_cache->read($s_key))
		{
			$s_where =  'user_id=? AND task_status>? AND task_id IN(' . implode(',',UCConfTask::$ar_fresh_task_info) . ')';
			$ar_tmp = array($uid,UCConfTask::TASK_USER_STATUS_GET);
			$o_task = new UCModTask($uid);
			$ar_tasks =  $o_task->getTask($s_where,$ar_tmp);
			if(!empty($ar_tasks))
			{
				foreach($ar_tasks as $ar_task)
				{
					$ar_match[$ar_task['task_id']] = true;
				}
				$flag = false;
				$ar_ret = array();
				foreach( UCConfTask::$ar_fresh_task_info as $value)
				{
					if(!array_key_exists($value,$ar_match))
					{
						$flag = true;
						$ar_ret['result']	= 1;
						$ar_ret['info'][]	= $value;
					}
				}
				if(!$flag)
				{
					$ar_ret['result'] = 2;
				}
			}
			else
			{
				$ar_ret['result'] = 1;
				$ar_ret['info']	  = UCConfTask::$ar_fresh_task_info;
			}
			$o_cache->write($s_key, serialize($ar_ret)); 
		}
		else
		{
			$ar_ret = unserialize($s_ret);
		}	
		return $ar_ret;
	}

	/**
	 * 返回任务开始和完成时间
	 * @param	string	$s_time		时间串
	 * @return	array				array('start_time'=>,'end_time'=>)	
	 *
	 */
	private function _getTime($s_time)
	{
		$ar_tmp = explode('|',UCConfTask::$ar_task_info[$task_id]['ext']);
		$o_user = UCModUserInfo::getUser($uid);
		$s_createtime = $o_user->getValue(USERINFO_REG_TIME);
		if('0'==$ar_tmp[0])
		{
			$ar_ret['start_time'] = $s_createtime;
		}
		else
		{
			$ar_ret['start_time'] = $ar_tmp[0];
		}
		if(3==count($ar_tmp))
		{
			$ar_ret['end_time'] = date('Y-m-d',(strtotime($s_createtime) + $ar_tmp[2]*24*3600)) + ' ' + $ar_tmp['1'];
		}
		else
		{
			$ar_ret['end_time'] = $ar_tmp[1];;
		}
		return $ar_ret;
	}
}
?>